// variables globales permettant de retenir les diff�rents �l�ments
baseDeFait = new Array(); // baseDeFait[site][nomDuFait] = valDuFait dans le site donné
baseDeRegle = new Array(); // baseDeRegle[indice_regle] = {condition, action}

function afficherBaseDeFait() {
	var out = '';
	
	for (var k in baseDeFait) {
		out += 'baseDeFait['+k+'] = '+baseDeFait[k] + "\n";
	}
	
	alert(out);
}

function afficherBaseDeRegle() {
	var out = '';
	
	for (var k in baseDeRegle) {
		out += 'baseDeRegle['+k+'] = '+baseDeRegle[k].condition + "	  " + baseDeRegle[k].action + "\n";
	}
	
	alert(out);
}

function cacherElement(site, id_el) {
	baseDeFait[site][id_el].style.display = 'none';
	// baseDeFait[site][id_el].active = false;
	// desactiverElements(site, id_el);
	// on ajoute la valeur à l'élément hidden pour dire que la question est désactivée et qu'il ne faudra donc pas tenir compte de sa réponse
	$('#'+id_el+' > input[name$="[active]"]').attr("value", "0");
}

// function activerElements(site, id_el) {
	// for (var k in baseDeFait[site][id_el+'_reponses']) {
		// baseDeFait[site][id_el+'_reponses'][k].active = true;
	// }
// }

// function desactiverElements(site, id_el) {
	// for (var k in baseDeFait[site][id_el+'_reponses']) {
		// baseDeFait[site][id_el+'_reponses'][k].active = false;
	// }
// }

function afficherElement(site, id_el) {
	baseDeFait[site][id_el].style.display = 'block';
	// baseDeFait[site][id_el].active = true;
	// activerElements(site, id_el);
	// on ajoute la valeur à l'élément hidden pour dire que la question est activée et qu'il faudra donc prendre en compte sa réponse
	$('#'+id_el+' > input[name$="[active]"]').attr("value", "1");
}

function changerStatut(site, id_el, statut, priorite) {
	function verifierPriorite(prio) {
		return prio == undefined || baseDeFait[site][id_el].priorite == undefined || baseDeFait[site][id_el].priorite < prio;
	}

	if(baseDeFait[site][id_el].texteStatut == undefined) {
		// si c'est un type liste ou article, alors il existe un element text
		if(baseDeFait[site][id_el].text != undefined) {
			// si c'est un type article, alors potentiellement on doit affecter toute les instances de cet article
			if(baseDeFait[site][id_el].libelle_reponse == undefined) {
				baseDeFait[site][id_el].libelle_reponse = baseDeFait[site][id_el].text;
			}
			baseDeFait[site][id_el].texteStatut = function(str, prio) {
				if(verifierPriorite(prio)) {
					var job = $(baseDeFait[site][id_el].parentNode.parentNode);
					var toutLesOptionsConcerne = job.find('option[value="'+baseDeFait[site][id_el].value+'"]');
					toutLesOptionsConcerne.text(baseDeFait[site][id_el].libelle_reponse + (str != "" ? " (" + str + ")" : ""));
					// baseDeFait[site][id_el].text = baseDeFait[site][id_el].libelle_reponse + (str != "" ? " (" + str + ")" : "");
					return true
				}
				else return false;
			}
		}
		// sinon, si c'est un type radio, alors c'est un OUINON, donc on affiche à côté
		else if(baseDeFait[site][id_el].type == 'radio') {
			if(baseDeFait[site][id_el].statut == undefined) {
				var spanStatut = document.createElement("span");
				spanStatut.style.fontWeight = 'bold';
				var text = document.createTextNode("");
				spanStatut.appendChild(text);
				baseDeFait[site][id_el].parentNode.appendChild(spanStatut);
				baseDeFait[site][id_el].statut = text;
			}
			baseDeFait[site][id_el].texteStatut = function(str, prio) {
				if(verifierPriorite(prio)) {
					baseDeFait[site][id_el].statut.nodeValue = str != "" ? " ("+str+")" : "";
					return true;
				}
				else return false;
			}
		}
		// sinon, si c'est un type number, alors c'est un ENTIER donc on affiche également à côté
		else if(baseDeFait[site][id_el].type == 'number') {
			if(baseDeFait[site][id_el].statut == undefined) {
				var spanStatut = document.createElement("span");
				spanStatut.style.fontWeight = 'bold';
				var text = document.createTextNode("");
				spanStatut.appendChild(text);
				baseDeFait[site][id_el].parentNode.appendChild(spanStatut);
				baseDeFait[site][id_el].statut = text;
			}
			baseDeFait[site][id_el].texteStatut = function(str, prio) {
				if(verifierPriorite(prio)) {
					if(baseDeFait[site][id_el].value >= baseDeFait[site][id_el].reponses[id_el].min
					&& baseDeFait[site][id_el].value <= baseDeFait[site][id_el].reponses[id_el].max) {
						baseDeFait[site][id_el].statut.nodeValue = str != "" ? " ("+str+")" : "";
					}
					else {
						baseDeFait[site][id_el].statut.nodeValue = baseDeFait[site][id_el].reponses[id_el].defaut != "" ? " ("+baseDeFait[site][id_el].reponses[id_el].defaut+")" : "";
					}
					return true;
				}
				else return false;
			}
		}
		else baseDeFait[site][id_el].texteStatut = function () {};
	}
	
	if(baseDeFait[site][id_el].texteStatut(statut, priorite)) {
		baseDeFait[site][id_el].statutActuel = statut;
		baseDeFait[site][id_el].priorite = priorite;
	}
}

function ajouterFait(site, id_el, el) {
	if(baseDeFait[site] == undefined) {
		baseDeFait[site] = new Array();
	}
	baseDeFait[site][id_el] = el;
	baseDeFait[site][id_el].active = true;
}

function ajouterRegle(condition, action) {
	baseDeRegle.push({condition:condition, action:action});
}

function appliquerMoteur(site) {
	// restauration des états et des statuts
	for (var k in baseDeFait[site]) {
		if(baseDeFait[site][k].style) {
			baseDeFait[site][k].style.display = baseDeFait[site][k].etatInitial;
			$('#'+k+' > input[name$="[active]"]').attr("value", ((baseDeFait[site][k].style.display == 'none') ? '0' : '1'));
			changerStatut(site, k, baseDeFait[site][k].statutParDefaut);
		}
	}
	// restauration des statuts
	
	for (var k in baseDeRegle) {
		if(baseDeRegle[k].condition()) {
			baseDeRegle[k].action();
		}
	}
}

function initBaseDeFait(site) {
	for (var k in baseDeFait[site]) {
		if(baseDeFait[site][k].style) {
			baseDeFait[site][k].etatInitial = baseDeFait[site][k].style.display;
			$('#'+k+' > input[name$="[active]"]').attr("value", ((baseDeFait[site][k].style.display == 'none') ? '0' : '1'));
		}
		// si il existe un statut, on l'enregistre comme statut par défaut
		if(baseDeFait[site][k].statutActuel) {
			baseDeFait[site][k].statutParDefaut = baseDeFait[site][k].statutActuel
		}
		else {
			baseDeFait[site][k].statutParDefaut = "";
		}
	}
}
